/*
 * Filename: /home/long/work/sample/c/2021-f0803/num2_1cout.c
 * Path: /home/long/work/sample/c/2021-f0803
 * Created Date: Saturday, April 17th 2021, 2:49:52 pm
 * Author: long
 * 编写一个函数： 计算一个正整数的二进制表示中1的个数。
 * Copyright (c) 2021 Your Company
 */


int count1_in_n(int n)
{
    /* 
    分析，观察二进制数表示可得出：消除最低为的1可使用 n & (n-1), 因此只要将所有数中的1消除即为1的个数
     */
    int c=0;
    for(; n!=0; c++) n = n & (n-1);
    return c;
}

void main()
{
    for(int i=0; i<10; i++){
        printf("%d has 1: %d\n", i, count1_in_n(i));
    }
}